js-libp2p-crypto
[](https://saucelabs.com/u/ipfs-js-
libp2p-crypto)
Crypto primitives for libp2p in JavaScript
This repo contains the JavaScript implementation of the crypto primitives
needed for libp2p. This is based on this go implementation.
Table of Contents
- Install
- Usage
- API
hmac
aes
webcrypto
keys
generateKeyPair(type, bits, callback)
generateEphemeralKeyPair(curve, callback)
keyStretcher(cipherType, hashType, secret, callback)
marshalPublicKey(key[, type], callback)
unmarshalPublicKey(buf)
marshalPrivateKey(key[, type])
unmarshalPrivateKey(buf, callback)
- Contribute
- License
Install
npm install --save libp2p-crypto
Usage
Example
const crypto = require('libp2p-crypto')
crypto.generateKeyPair('RSA', 2048, (err, key) => {
})
API
hmac
Exposes an interface to the Keyed-Hash Message Authentication Code (HMAC) as defined in U.S. Federal Information Processing Standards Publication 198. An HMAC is a cryptographic hash that uses a key to sign a message. The receiver verifies the hash by recomputing it using the same key.
create(hash, secret, callback)
hash: String
secret: Buffer
callback: Function
digest(data, callback)
data: Buffer
callback: Function
aes
Expoes an interface to AES encryption (formerly Rijndael), as defined in U.S. Federal Information Processing Standards Publication 197.
This uses CTR
mode.
create(key, iv, callback)
key: Buffer
The key, if length 16
then AES 128
is used. For length 32
, AES 256
is used.iv: Buffer
Must have length 16
.callback: Function
encrypt(data, callback)
data: Buffer
callback: Function
encrypt(data, callback)
data: Buffer
callback: Function
webcrypto
Depending on the environment this is either an instance of node-webcrypto-ossl or the result of window.crypto
.
keys
generateKeyPair(type, bits, callback)
type: String
, only 'RSA'
is currently supportedbits: Number
Minimum of 1024callback: Function
Generates a keypair of the given type and bitsize.
generateEphemeralKeyPair(curve, callback)
curve: String
, one of 'P-256'
, 'P-384'
, 'P-521'
is currently supportedcallback: Function
Generates an ephemeral public key and returns a function that will compute the shared secret key.
Focuses only on ECDH now, but can be made more general in the future.
Calls back with an object of the form
{
key: Buffer,
genSharedKey: Function
}
keyStretcher(cipherType, hashType, secret, callback)
cipherType: String
, one of 'AES-128'
, 'AES-256'
, 'Blowfish'
hashType: String
, one of 'SHA1'
, SHA256
, SHA512
secret: Buffer
callback: Function
Generates a set of keys for each party by stretching the shared key.
Calls back with an object of the form
{
k1: {
iv: Buffer,
cipherKey: Buffer,
macKey: Buffer
},
k2: {
iv: Buffer,
cipherKey: Buffer,
macKey: Buffer
}
}
marshalPublicKey(key[, type], callback)
key: crypto.rsa.RsaPublicKey
type: String
, only 'RSA'
is currently supported
Converts a public key object into a protobuf serialized public key.
unmarshalPublicKey(buf)
Converts a protobuf serialized public key into its representative object.
marshalPrivateKey(key[, type])
key: crypto.rsa.RsaPrivateKey
type: String
, only 'RSA'
is currently supported
Converts a private key object into a protobuf serialized private key.
unmarshalPrivateKey(buf, callback)
buf: Buffer
callback: Function
Converts a protobuf serialized private key into its representative object.
randomBytes(number)
Generates a Buffer with length number
populated by random bytes.
Contribute
Feel free to join in. All welcome. Open an issue!
This repository falls under the IPFS Code of Conduct.
License
MIT